import {cloneDeep} from 'lodash';

// 子节点属性下拉框数据
const genDeAttrfiList = [
    {
        value: 'func',
        label: '函数引用（func）'
    },
    {
        value: 'minlen',
        label: 'minlen'
    },
];
const genDeAttrbeList = [
    {
        value: 'offset',
        label: '偏移量（offset）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
    {
        value: 'val',
        label: '预期值（val）'
    },
];
const genDeAttrbtList = [
    {
        value: 'offset',
        label: '偏移量（offset）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
    {
        value: 'r',
        label: '相对关系（r）'
    },
    {
        value: 'val',
        label: '预期值（val）'
    },
];
const genDeAttrbbList = [
    {
        value: 'offset',
        label: '偏移量（offset）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
    {
        value: 'lb',
        label: '取值下限（lb）'
    },
    {
        value: 'ub',
        label: '取值上限（ub）'
    },
];
const genDeAttrltList = [
    {
        value: 'r',
        label: '相对关系（r）'
    },
    {
        value: 'val',
        label: '预期值（val）'
    },
];
const genDeAttrlcrList = [
    {
        value: 'ex',
        label: '计算因数（ex）'
    },
    {
        value: 'val',
        label: '值（val）'
    },
];
const genDeAttrlcrexList = [
    {
        value: 'ex',
        label: '计算因数（ex）'
    },
    {
        value: 'val',
        label: '值（val）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
];
const genDeAttrccrList = [
    {
        value: 'ex',
        label: '计算因数（ex）'
    },
    {
        value: 'val0',
        label: '值（val0）'
    },
    {
        value: 'val1',
        label: '值（val1）'
    },
];
const genDeAttrportList = [
    {
        value: 'val',
        label: '预期端口值（val）'
    },
    {
        value: 'type',
        label: '检查方向（type）'
    },
];
const genDeAttrportngList = [
    {
        value: 'val',
        label: '预期端口值（val）'
    },
    {
        value: 'type',
        label: '检查方向（type）'
    },
];
const genDeAttrmatchList = [
    {
        value: 'c',
        label: '匹配内容（c）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
    {
        value: 'regset',
        label: '命中后设定一个标定点（regset）'
    },
    {
        value: 'stop',
        label: '停止字符（stop）'
    },
];
const genDeAttrpcreList = [
    {
        value: 'c',
        label: '匹配内容（c）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
    {
        value: 'regset',
        label: '命中后设定一个标定点（regset）'
    },
    {
        value: 'stop',
        label: '停止字符（stop）'
    },
    {
        value: 'range',
        label: '停止字符（range）'
    },
];
const genDeAttrextractList = [
    {
        value: 'val',
        label: '值（val）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
    {
        value: 'regset',
        label: '命中后设定一个标定点（regset）'
    },
];
const genDeAttrexportList = [
    {
        value: 'encode',
        label: '是否进行base64编码（encode）'
    },
    {
        value: 'key',
        label: '导出内容的关键字（key）'
    },
    {
        value: 'len',
        label: '导出长度（len）'
    },
    {
        value: 'offset',
        label: '导出的偏移（offset）'
    },
    {
        value: 'o',
        label: '属性集合（o）'
    },
    {
        value: 'stop',
        label: '停止字符（stop）'
    },
    {
        value: 'maxlen',
        label: '最大导出长度（maxlen）'
    },
];

const optionsObject = {
    fi: genDeAttrfiList,
    be: genDeAttrbeList,
    bt: genDeAttrbtList,
    bb: genDeAttrbbList,
    lt: genDeAttrltList,
    lcr: genDeAttrlcrList,
    'lcr-ex': genDeAttrlcrexList,
    ccr: genDeAttrccrList,
    port: genDeAttrportList,
    portng: genDeAttrportngList,
    match: genDeAttrmatchList,
    pcre: genDeAttrpcreList,
    extract: genDeAttrextractList,
    'export': genDeAttrexportList
}

const genDeAttrValO1List = [
    {
        value: 'r',
        label: '向后匹配（r）'
    },
    {
        value: 'R',
        label: '向前匹配（R）'
    },
    {
        value: '!',
        label: '取反（!）'
    },

];
const genDeAttrValO2List = [
    {
        value: 'r',
        label: '向后匹配（r）'
    },
    {
        value: 'R',
        label: '向前匹配（R）'
    },
];
const genDeAttrValO3List = [
    {
        value: 'r',
        label: '向后匹配（r）'
    },
    {
        value: 'R',
        label: '向前匹配（R）'
    },
    {
        value: 'p',
        label: '相对前一个match/pcre命中的位置（p）'
    },
    {
        value: 'i',
        label: '忽略大小写（i）'
    },
];
const genDeAttrValO4List = [
    {
        value: 'i',
        label: 'PCRE_CASELESS（i）'
    },
    {
        value: 's',
        label: 'PCRE_DOTALL（s）'
    },
    {
        value: 'm',
        label: 'PCRE_MULTILINE（m）'
    },
    {
        value: 'x',
        label: 'PCRE_EXTENDED（x）'
    },
    {
        value: 'r',
        label: '向后匹配（r）'
    },
    {
        value: 'R',
        label: '向前匹配（R）'
    },
    {
        value: 'p',
        label: '继续上一次匹配的位置进行偏移处理（p）'
    },
    {
        value: '!',
        label: '匹配结果取反（!）'
    },
];
const genDeAttrValRList = [
    {
        value: 'lt',
        label: '期望字节流小于预期（lt）'
    },
    {
        value: 'gt',
        label: '期望字节流大于预期（gt）'
    },
    {
        value: 'eq',
        label: '期望字节流等于预期（eq）'
    },
    {
        value: 'neq',
        label: '期望字节流不等于预期（neq）'
    },
];
const genDeAttrValTypeList = [
    {
        value: 'sp',
        label: '只匹配源端口（sp）'
    },
    {
        value: 'dp',
        label: '只匹配目的端口（dp）'
    },
    {
        value: 'both',
        label: '匹配双向检查（both）'
    },
];

const getOptions = (childNodeVal) => {
    let options = [];
    for (const key in optionsObject) {
        if (key === childNodeVal) {
            options = cloneDeep(optionsObject[key])
        }
    }
    return options;
}

export {
    getOptions,
    genDeAttrValO1List,
    genDeAttrValO2List,
    genDeAttrValO3List,
    genDeAttrValO4List,
    genDeAttrValRList,
    genDeAttrValTypeList
}
